home *** CD-ROM | disk | FTP | other *** search
/ Aminet 22 / Aminet 22 (1997)(GTI - Schatztruhe)[!][Dec 1997].iso / Aminet / dev / amos / APro_GadTools.lha / GadTools / GadTools.Inc / GadTools.amosSourceCode
AMOS Source Code  |  1995-10-09  |  22KB  |  801 lines

  1. ' _PushButton[Id,X,Y,Color1,Color2,Color3,Color4,"Button-Name"]  
  2. ' _Del_PushButton[Id]
  3. ' _CheckBox[Id,X,Y,Color1,Color2,Color3,Color4,On/Off]     
  4. ' _Set_CheckBox_State[Id,On/Off] 
  5. ' _Get_CheckBox_State[Id]  
  6. ' _Del_CheckBox[Id]
  7. ' _RadioButton[Id,X,Y,Color1,Color2,Color3,On/Off] 
  8. ' _Set_RadioButton_State[Id,On/Off]
  9. ' _Get_RadioButton_State[Id] 
  10. ' _Del_RadioButton[Id] 
  11. ' _CycleButton[Id,X,Y,Color1,Color2,Color3,Color4,"Text1|Text2..."]
  12. ' _Set_CycleButton_State[Id,TextNumber]
  13. ' _Get_CycleButton_State[Id] 
  14. ' _Del_CycleButton[Id] 
  15. ' _ToggleButton[Id,X,Y,Color1,Color2,Color3,Color4,On/Off,"Button-Name"]   
  16. ' _Set_ToggleButton_State[Id,On/Off] 
  17. ' _Get_ToggleButton_State[Id]
  18. ' _Del_ToggleButton[Id]
  19. ' _StringGadget[Id,X,Y,Color1,Color2,Color3,Color4,Color5,GadLen,MaxTextLen]   
  20. ' _Set_StringGadget_State[Id,String$]
  21. ' _Get_StringGadget_State[Id]
  22. ' _Del_StringGadget[Id]
  23. ' _TextGadget[Id,X,Y,Color1,Color2,Color3,Color4,MaxTextLen] 
  24. ' _Set_TextGadget_Text[Id,String$] 
  25. ' _Make_Mask[X1,Y1,X2,Y2,Color1,Color2,Color3] 
  26. ' _Screen_Open[Screen,0-2 {Lores/Hires/Interlace} ]    
  27.  
  28.  
  29. Procedure _PUSHBUTTON[Z,X,Y,A,B,C,D,A$]
  30. '
  31. '    Button aufbauen!
  32. '
  33. If Z<1 or Z>30 Then Pop Proc
  34. F=Len(A$) : E=Screen Mode
  35. If E<>0 and X/2*2<>X Then Inc X
  36. Cls A,X,Y To X+F*8+5,Y+13
  37. Cls B,X+1,Y+1 To X+1+F*8+5,Y+13
  38. Cls C,X+1,Y+1 To X+1+F*8+4,Y+12
  39. Ink D,C : Text X+3,Y+9,A$
  40. '
  41. '    Daten zum Button in Bank sichern! 
  42. '
  43. Reserve As Work 500+Z,20 : Rem           <------- Ab Bank 501 = Button 1  
  44. Doke Start(500+Z)+0,X : Rem              <------- Word.W = Min X Mouse 
  45. Doke Start(500+Z)+2,X+F*8+5 : Rem        <------- Word.W = Max X Mouse 
  46. Doke Start(500+Z)+4,Y : Rem              <------- Word.W = Min Y Mouse 
  47. Doke Start(500+Z)+6,Y+12 : Rem           <------- Word.W = Max Y Mouse  
  48. Doke Start(500+Z)+8,X : Rem              <------- Word.W = X Coords.   
  49. Doke Start(500+Z)+10,Y : Rem             <------- Word.W = Y Coords.  
  50. Poke Start(500+Z)+12,A : Rem             <------- Byte.B = 1.Farbe  
  51. Poke Start(500+Z)+13,B : Rem             <------- Byte.B = 2.Farbe  
  52. Poke Start(500+Z)+14,F : Rem             <------- Byte.B = Text-L�nge!
  53.  
  54. If Length(531)=0 Then Reserve As Work 531,35
  55. A=Hunt(Start(531) To Start(531)+Length(531),Chr$(0))
  56. If Hunt(Start(531) To Start(531)+Length(531),Chr$(Z))=0 Then Poke A,Z
  57.  
  58. End Proc
  59. Procedure _PUSHBUTTON_HIT
  60.  
  61. If Length(531)=0 Then Pop Proc[0]
  62. I=0
  63. Do 
  64. Z=Peek(Start(531)+I)+500
  65. Inc I
  66. Exit If Z=500
  67.  
  68. A=Deek(Start(Z)+0) : B=Deek(Start(Z)+2)
  69. C=Deek(Start(Z)+4) : D=Deek(Start(Z)+6)
  70.  
  71. If X Screen(X Mouse)>A and X Screen(X Mouse)<B and Y Screen(Y Mouse)>C and Y Screen(Y Mouse)<D and Mouse Key=1
  72.    X=Deek(Start(Z)+8) : Y=Deek(Start(Z)+10)
  73.    A=Peek(Start(Z)+12) : B=Peek(Start(Z)+13)
  74.    F=Peek(Start(Z)+14)
  75.  
  76.    Ink A,B
  77.    Draw X+1,Y+12 To X+F*8+5,Y+12
  78.    Draw X+F*8+5,Y+1 To X+F*8+5,Y+12
  79.    Ink B,A
  80.    Draw X,Y To X+F*8+4,Y
  81.    Draw X,Y To X,Y+12
  82.  
  83.    Repeat : Until Mouse Key=0
  84.  
  85.    Ink A,B
  86.    Draw X,Y To X+F*8+4,Y
  87.    Draw X,Y To X,Y+12
  88.    Ink B,A
  89.    Draw X+1,Y+12 To X+F*8+5,Y+12
  90.    Draw X+F*8+5,Y+1 To X+F*8+5,Y+12
  91.    Pop Proc[Z-500]
  92. End If 
  93.  
  94. Loop 
  95. End Proc[0]
  96. Procedure _DEL_PUSHBUTTON[A]
  97. If A<1 or A>30 or Length(500+A)=0 Then Pop Proc
  98. A$=Peek$(Start(531),30,Chr$(0))
  99. A$=A$-Chr$(A) : Poke$ Start(531),A$+Chr$(0)
  100. If A$="" Then Erase 531
  101. Erase 500+A
  102. End Proc
  103. Procedure _CHECKBOX[Z,X,Y,A,B,C,D,E]
  104. '
  105. '    Box aufbauen! 
  106. '
  107. If Z<1 or Z>30 Then Pop Proc
  108. F=Screen Mode
  109. If F<>0 and X/2*2<>X Then Inc X
  110. If E<0 Then E=0
  111. If E>1 Then E=1
  112. Cls A,X,Y To X+21,Y+13
  113. Cls B,X+1,Y+1 To X+22,Y+13
  114. Cls C,X+1,Y+1 To X+21,Y+12
  115.  
  116. If E=1
  117. Ink D,C
  118. Draw X+6,Y+6 To X+9,Y+9
  119. Draw X+9,Y+9 To X+15,Y+3
  120. Draw X+7,Y+6 To X+10,Y+9
  121. Draw X+10,Y+9 To X+16,Y+3
  122. End If 
  123. '
  124. '    Daten zum Button in Bank sichern! 
  125. '
  126. Reserve As Work 600+Z,20 : Rem           <------- Ab Bank 601 = Box 1   
  127. Doke Start(600+Z)+0,X : Rem              <------- Word.W = Min X Mouse 
  128. Doke Start(600+Z)+2,X+21 : Rem           <------- Word.W = Max X Mouse  
  129. Doke Start(600+Z)+4,Y : Rem              <------- Word.W = Min Y Mouse 
  130. Doke Start(600+Z)+6,Y+12 : Rem           <------- Word.W = Max Y Mouse  
  131. Doke Start(600+Z)+8,X : Rem              <------- Word.W = X Coords.   
  132. Doke Start(600+Z)+10,Y : Rem             <------- Word.W = Y Coords.  
  133. Poke Start(600+Z)+12,A : Rem             <------- Byte.B = 1.Farbe  
  134. Poke Start(600+Z)+13,B : Rem             <------- Byte.B = 2.Farbe  
  135. Poke Start(600+Z)+14,C : Rem             <------- Byte.B = 3.Farbe  
  136. Poke Start(600+Z)+15,D : Rem             <------- Byte.B = 4.Farbe  
  137. Poke Start(600+Z)+16,E : Rem             <------- Byte.B = On/Off 
  138.  
  139. If Length(631)=0 Then Reserve As Work 631,35
  140. A=Hunt(Start(631) To Start(631)+Length(631),Chr$(0))
  141. If Hunt(Start(631) To Start(631)+Length(631),Chr$(Z))=0 Then Poke A,Z
  142.  
  143. End Proc
  144. Procedure _CHECKBOX_HIT
  145.  
  146. If Length(631)=0 Then Pop Proc[0]
  147. I=0 : F=0
  148. Do 
  149. Z=Peek(Start(631)+I)+600
  150. Inc I
  151. Exit If Z=600
  152.  
  153. A=Deek(Start(Z)+0) : B=Deek(Start(Z)+2)
  154. C=Deek(Start(Z)+4) : D=Deek(Start(Z)+6)
  155.  
  156. If X Screen(X Mouse)>A and X Screen(X Mouse)<B and Y Screen(Y Mouse)>C and Y Screen(Y Mouse)<D and Mouse Key=1 Then F=1
  157.  
  158. If F=1
  159.    X=Deek(Start(Z)+8) : Y=Deek(Start(Z)+10)
  160.    A=Peek(Start(Z)+12) : B=Peek(Start(Z)+13)
  161.    C=Peek(Start(Z)+14) : D=Peek(Start(Z)+15)
  162.    E=Peek(Start(Z)+16)
  163. End If 
  164.  
  165. If F=1 and E=1
  166. Ink C,D
  167. Draw X+6,Y+6 To X+9,Y+9
  168. Draw X+9,Y+9 To X+15,Y+3
  169. Draw X+7,Y+6 To X+10,Y+9
  170. Draw X+10,Y+9 To X+16,Y+3
  171. Poke Start(Z)+16,0
  172. Repeat : Until Mouse Key=0
  173. Pop Proc[Z-600]
  174. End If 
  175.  
  176. If F=1 and E=0
  177. Ink D,C
  178. Draw X+6,Y+6 To X+9,Y+9
  179. Draw X+9,Y+9 To X+15,Y+3
  180. Draw X+7,Y+6 To X+10,Y+9
  181. Draw X+10,Y+9 To X+16,Y+3
  182. Poke Start(Z)+16,1
  183. Repeat : Until Mouse Key=0
  184. Pop Proc[Z-600]
  185. End If 
  186.  
  187. Loop 
  188. End Proc[0]
  189. Procedure _SET_CHECKBOX_STATE[A,B]
  190.  
  191. If A<1 or A>30 Then Pop Proc
  192.  
  193. If Length(600+A)<>0
  194. E=1
  195. X=Deek(Start(600+A)+8) : Y=Deek(Start(600+A)+10)
  196. C=Peek(Start(600+A)+14) : D=Peek(Start(600+A)+15)
  197. End If 
  198.  
  199. If E=1 and B=0
  200. Ink C,D
  201. Draw X+6,Y+6 To X+9,Y+9
  202. Draw X+9,Y+9 To X+15,Y+3
  203. Draw X+7,Y+6 To X+10,Y+9
  204. Draw X+10,Y+9 To X+16,Y+3
  205. Poke Start(600+A)+16,0
  206. End If 
  207.  
  208. If E=1 and B=1
  209. Ink D,C
  210. Draw X+6,Y+6 To X+9,Y+9
  211. Draw X+9,Y+9 To X+15,Y+3
  212. Draw X+7,Y+6 To X+10,Y+9
  213. Draw X+10,Y+9 To X+16,Y+3
  214. Poke Start(600+A)+16,1
  215. End If 
  216. End Proc
  217. Procedure _GET_CHECKBOX_STATE[A]
  218. If A<1 or A>30 or Length(600+A)=0 Then Pop Proc[-1]
  219. B=Peek(Start(600+A)+16)
  220. End Proc[B]
  221. Procedure _DEL_CHECKBOX[A]
  222. If A<1 or A>30 or Length(600+A)=0 Then Pop Proc
  223. A$=Peek$(Start(631),30,Chr$(0))
  224. A$=A$-Chr$(A) : Poke$ Start(631),A$+Chr$(0)
  225. If A$="" Then Erase 631
  226. Erase 600+A
  227. End Proc
  228. Procedure _RADIOBUTTON[Z,X,Y,A,B,C,D]
  229. '
  230. '    Box aufbauen! 
  231. '
  232. If Z<1 or Z>30 Then Pop Proc
  233. F=Screen Mode
  234. If F<>0 and X/2*2<>X Then Inc X
  235. If D<0 Then D=0
  236. If D>1 Then D=1
  237. Ink A,C
  238. Ellipse X+12,Y+6,12,6
  239.  
  240. If D=0
  241. Ink C,B
  242. Bar X+7,Y+4 To X+17,Y+8
  243. Draw X+9,Y+3 To X+15,Y+3
  244. Draw X+9,Y+9 To X+15,Y+9
  245. Draw X+6,Y+5 To X+6,Y+7
  246. Draw X+18,Y+5 To X+18,Y+7
  247. End If 
  248.  
  249. If D=1
  250. Ink B,C
  251. Bar X+7,Y+4 To X+17,Y+8
  252. Draw X+9,Y+3 To X+15,Y+3
  253. Draw X+9,Y+9 To X+15,Y+9
  254. Draw X+6,Y+5 To X+6,Y+7
  255. Draw X+18,Y+5 To X+18,Y+7
  256. End If 
  257. '
  258. '    Daten zum Button in Bank sichern! 
  259. '
  260. Reserve As Work 700+Z,20 : Rem           <------- Ab Bank 701 = Radio 1   
  261. Doke Start(700+Z)+0,X : Rem              <------- Word.W = Min X Mouse 
  262. Doke Start(700+Z)+2,X+24 : Rem           <------- Word.W = Max X Mouse  
  263. Doke Start(700+Z)+4,Y : Rem              <------- Word.W = Min Y Mouse 
  264. Doke Start(700+Z)+6,Y+12 : Rem           <------- Word.W = Max Y Mouse  
  265. Doke Start(700+Z)+8,X : Rem              <------- Word.W = X Coords.   
  266. Doke Start(700+Z)+10,Y : Rem             <------- Word.W = Y Coords.  
  267. Poke Start(700+Z)+12,A : Rem             <------- Byte.B = 1.Farbe  
  268. Poke Start(700+Z)+13,B : Rem             <------- Byte.B = 2.Farbe  
  269. Poke Start(700+Z)+14,C : Rem             <------- Byte.B = 3.Farbe  
  270. Poke Start(700+Z)+15,D : Rem             <------- Byte.B = On/Off 
  271.  
  272. If Length(731)=0 Then Reserve As Work 731,35
  273. A=Hunt(Start(731) To Start(731)+Length(731),Chr$(0))
  274. If Hunt(Start(731) To Start(731)+Length(731),Chr$(Z))=0 Then Poke A,Z
  275.  
  276. End Proc
  277. Procedure _RADIOBUTTON_HIT
  278.  
  279. If Length(731)=0 Then Pop Proc[0]
  280. I=0 : F=0
  281. Do 
  282. Z=Peek(Start(731)+I)+700
  283. Inc I
  284. Exit If Z=700
  285.  
  286. A=Deek(Start(Z)+0) : B=Deek(Start(Z)+2)
  287. C=Deek(Start(Z)+4) : D=Deek(Start(Z)+6)
  288.  
  289. If X Screen(X Mouse)>A and X Screen(X Mouse)<B and Y Screen(Y Mouse)>C and Y Screen(Y Mouse)<D and Mouse Key=1 Then F=1
  290.  
  291. If F=1
  292.    X=Deek(Start(Z)+8) : Y=Deek(Start(Z)+10)
  293.    A=Peek(Start(Z)+12) : B=Peek(Start(Z)+13)
  294.    C=Peek(Start(Z)+14) : D=Peek(Start(Z)+15)
  295. End If 
  296.  
  297. If F=1 and D=1
  298. Ink C,B
  299. Bar X+7,Y+4 To X+17,Y+8
  300. Draw X+9,Y+3 To X+15,Y+3
  301. Draw X+9,Y+9 To X+15,Y+9
  302. Draw X+6,Y+5 To X+6,Y+7
  303. Draw X+18,Y+5 To X+18,Y+7
  304. Poke Start(Z)+15,0
  305. Repeat : Until Mouse Key=0
  306. Pop Proc[Z-700]
  307. End If 
  308.  
  309. If F=1 and D=0
  310. Ink B,C
  311. Bar X+7,Y+4 To X+17,Y+8
  312. Draw X+9,Y+3 To X+15,Y+3
  313. Draw X+9,Y+9 To X+15,Y+9
  314. Draw X+6,Y+5 To X+6,Y+7
  315. Draw X+18,Y+5 To X+18,Y+7
  316. Poke Start(Z)+15,1
  317. Repeat : Until Mouse Key=0
  318. Pop Proc[Z-700]
  319. End If 
  320.  
  321. Loop 
  322. End Proc[0]
  323. Procedure _SET_RADIOBUTTON_STATE[A,B]
  324.  
  325. If A<1 or A>30 Then Pop Proc
  326.  
  327. If Length(700+A)<>0
  328. E=1
  329. X=Deek(Start(700+A)+8) : Y=Deek(Start(700+A)+10)
  330. C=Peek(Start(700+A)+13) : D=Peek(Start(700+A)+14)
  331. End If 
  332.  
  333. If E=1 and B=0
  334. Ink D,C
  335. Bar X+7,Y+4 To X+17,Y+8
  336. Draw X+9,Y+3 To X+15,Y+3
  337. Draw X+9,Y+9 To X+15,Y+9
  338. Draw X+6,Y+5 To X+6,Y+7
  339. Draw X+18,Y+5 To X+18,Y+7
  340. Poke Start(700+A)+15,0
  341. End If 
  342.  
  343. If E=1 and B=1
  344. Ink C,D
  345. Bar X+7,Y+4 To X+17,Y+8
  346. Draw X+9,Y+3 To X+15,Y+3
  347. Draw X+9,Y+9 To X+15,Y+9
  348. Draw X+6,Y+5 To X+6,Y+7
  349. Draw X+18,Y+5 To X+18,Y+7
  350. Poke Start(700+A)+15,1
  351. End If 
  352.  
  353. End Proc
  354. Procedure _GET_RADIOBUTTON_STATE[A]
  355. If A<1 or A>30 or Length(700+A)=0 Then Pop Proc[-1]
  356. B=Peek(Start(700+A)+15)
  357. End Proc[B]
  358. Procedure _DEL_RADIOBUTTON[A]
  359. If A<1 or A>30 or Length(700+A)=0 Then Pop Proc
  360. A$=Peek$(Start(731),30,Chr$(0))
  361. A$=A$-Chr$(A) : Poke$ Start(731),A$+Chr$(0)
  362. If A$="" Then Erase 731
  363. Erase 700+A
  364. End Proc
  365. Procedure _CYCLEBUTTON[Z,X,Y,A,B,C,D,A$]
  366. F=0 : G=0 : E=30
  367. If Z<1 or Z>30 Then Pop Proc
  368. If Right$(A$,1)<>"|" Then A$=A$+"|"
  369.  
  370. Reserve As Work 800+Z,Len(A$)+50 : Rem   <------- Ab Bank 801 = Cycle 1   
  371.  
  372. Poke$ Start(800+Z)+30,A$
  373. B$=Peek$(Start(800+Z)+30,75,"|") : Rem   <------- Ersten Name Merken  
  374.  
  375. Repeat : Rem                             <------- L�ngsten Name ermitteln 
  376. C$=Peek$(Start(800+Z)+E,75,"|")
  377. If Len(C$)>F Then F=Len(C$)
  378. Add E,Len(C$)+1
  379. Inc G
  380. Until E=Len(A$)+30
  381. '
  382. '   Gadget aufbauen! 
  383. '
  384. E=Screen Mode
  385. If E<>0 and X/2*2<>X Then Inc X
  386. Cls A,X,Y To X+F*8+25,Y+13
  387. Cls B,X+1,Y+1 To X+1+F*8+25,Y+13
  388. Cls C,X+1,Y+1 To X+1+F*8+24,Y+12
  389. Ink D,C : Text X+23,Y+9,B$
  390. Ink B,C
  391. Box X+5,Y+2 To X+14,Y+10
  392. Box X+6,Y+2 To X+13,Y+10
  393. Draw X+11,Y+5 To X+16,Y+5
  394. Draw X+12,Y+6 To X+15,Y+6
  395. Draw X+19,Y+2 To X+19,Y+10
  396. Ink A,C
  397. Draw X+20,Y+2 To X+20,Y+10
  398. Ink C,A
  399. Plot X+5,Y+2 : Plot X+5,Y+10
  400. Plot X+14,Y+10 : Plot X+14,Y+2
  401. Plot X+13,Y+8 : Plot X+14,Y+8
  402. '
  403. '    Daten zum Button in Bank sichern! 
  404. '
  405. Doke Start(800+Z)+0,X : Rem              <------- Word.W = Min X Mouse 
  406. Doke Start(800+Z)+2,X+F*8+25 : Rem       <------- Word.W = Max X Mouse  
  407. Doke Start(800+Z)+4,Y : Rem              <------- Word.W = Min Y Mouse 
  408. Doke Start(800+Z)+6,Y+12 : Rem           <------- Word.W = Max Y Mouse  
  409. Doke Start(800+Z)+8,X : Rem              <------- Word.W = X Coords.   
  410. Doke Start(800+Z)+10,Y : Rem             <------- Word.W = Y Coords.  
  411. Poke Start(800+Z)+12,A : Rem             <------- Byte.B = 1.Farbe  
  412. Poke Start(800+Z)+13,B : Rem             <------- Byte.B = 2.Farbe  
  413. Poke Start(800+Z)+14,C : Rem             <------- Byte.B = 3.Farbe  
  414. Poke Start(800+Z)+15,D : Rem             <------- Byte.B = 4.Farbe  
  415. Poke Start(800+Z)+16,G : Rem             <------- Byte.B = Anzahl Texte!
  416. Poke Start(800+Z)+17,1 : Rem             <------- Byte.B = Aktueller Text!  
  417. Poke Start(800+Z)+18,F : Rem             <------- Byte.B = L�ngster Text! 
  418.  
  419. If Length(831)=0 Then Reserve As Work 831,35
  420. A=Hunt(Start(831) To Start(831)+Length(831),Chr$(0))
  421. If Hunt(Start(831) To Start(831)+Length(831),Chr$(Z))=0 Then Poke A,Z
  422.  
  423. End Proc
  424. Procedure _CYCLEBUTTON_HIT
  425.  
  426. If Length(831)=0 Then Pop Proc[0]
  427. I=0 : H=0
  428. Do 
  429. Z=Peek(Start(831)+I)+800
  430. Inc I
  431. Exit If Z=800
  432.  
  433. A=Deek(Start(Z)+0) : B=Deek(Start(Z)+2)
  434. C=Deek(Start(Z)+4) : D=Deek(Start(Z)+6)
  435.  
  436. If X Screen(X Mouse)>A and X Screen(X Mouse)<B and Y Screen(Y Mouse)>C and Y Screen(Y Mouse)<D and Mouse Key=1
  437.    X=Deek(Start(Z)+8) : Y=Deek(Start(Z)+10)
  438.    A=Peek(Start(Z)+12) : B=Peek(Start(Z)+13)
  439.    C=Peek(Start(Z)+14) : D=Peek(Start(Z)+15)
  440.    E=Peek(Start(Z)+16) : F=Peek(Start(Z)+17)
  441.    G=Peek(Start(Z)+18)
  442.  
  443.    Ink A,B
  444.    Draw X+1,Y+12 To X+G*8+25,Y+12
  445.    Draw X+G*8+25,Y+1 To X+G*8+25,Y+12
  446.    Draw X+19,Y+2 To X+19,Y+10
  447.    Ink B,A
  448.    Draw X,Y To X+G*8+24,Y
  449.    Draw X,Y To X,Y+12
  450.    Draw X+20,Y+2 To X+20,Y+10
  451.  
  452.    Repeat : Until Mouse Key=0
  453.  
  454.    Ink A,B
  455.    Draw X,Y To X+G*8+24,Y
  456.    Draw X,Y To X,Y+12
  457.    Draw X+20,Y+2 To X+20,Y+10
  458.    Ink B,A
  459.    Draw X+1,Y+12 To X+G*8+25,Y+12
  460.    Draw X+G*8+25,Y+1 To X+G*8+25,Y+12
  461.    Draw X+19,Y+2 To X+19,Y+10
  462.  
  463.    Add F,1,1 To E
  464.    Poke Start(Z)+17,F
  465.  
  466.    For A=1 To F
  467.    A$=Peek$(Start(Z)+30+H,75,"|")
  468.    Add H,Len(A$)+1
  469.    Next A
  470.  
  471.    Ink D,C
  472.    Text X+23,Y+9,Space$(G)
  473.    Text X+23,Y+9,A$
  474.    Pop Proc[Z-800]
  475. End If 
  476.  
  477. Loop 
  478. End Proc[0]
  479. Procedure _SET_CYCLEBUTTON_STATE[A,B]
  480.  
  481. If A<1 or A>30 Then Pop Proc
  482. If Length(800+A)<>0 Then If Peek(Start(800+A)+16)=>B Then E=1
  483.  
  484. If E=1
  485. H=0
  486. X=Deek(Start(800+A)+8) : Y=Deek(Start(800+A)+10)
  487. C=Peek(Start(800+A)+14) : D=Peek(Start(800+A)+15)
  488. G=Peek(Start(800+A)+18) : Poke Start(800+A)+17,B
  489.  
  490. For F=1 To B
  491. A$=Peek$(Start(800+A)+30+H,75,"|")
  492. Add H,Len(A$)+1
  493. Next F
  494.  
  495. Ink D,C
  496. Text X+23,Y+9,Space$(G)
  497. Text X+23,Y+9,A$
  498. End If 
  499.  
  500. End Proc
  501. Procedure _GET_CYCLEBUTTON_STATE[A]
  502. If A<1 or A>30 or Length(800+A)=0 Then Pop Proc[-1]
  503. B=Peek(Start(800+A)+17)
  504. End Proc[B]
  505. Procedure _DEL_CYCLEBUTTON[A]
  506. If A<1 or A>30 or Length(800+A)=0 Then Pop Proc
  507. A$=Peek$(Start(831),30,Chr$(0))
  508. A$=A$-Chr$(A) : Poke$ Start(831),A$+Chr$(0)
  509. If A$="" Then Erase 831
  510. Erase 800+A
  511. End Proc
  512. Procedure _TOGGLEBUTTON[Z,X,Y,A,B,C,D,E,A$]
  513. '
  514. '    Button aufbauen!
  515. '
  516. If Z<1 or Z>30 or E<0 or E>1 Then Pop Proc
  517. F=Len(A$) : G=Screen Mode
  518. If G<>0 and X/2*2<>X Then Inc X
  519.  
  520. If E=0
  521. Cls A,X,Y To X+F*8+5,Y+13
  522. Cls B,X+1,Y+1 To X+1+F*8+5,Y+13
  523. Cls C,X+1,Y+1 To X+1+F*8+4,Y+12
  524. Ink D,C : Text X+3,Y+9,A$
  525. Else 
  526. Cls B,X,Y To X+F*8+5,Y+13
  527. Cls A,X+1,Y+1 To X+1+F*8+5,Y+13
  528. Cls C,X+1,Y+1 To X+1+F*8+4,Y+12
  529. Ink D,C : Text X+3,Y+9,A$
  530. End If 
  531. '
  532. '    Daten zum Button in Bank sichern! 
  533. '
  534. Reserve As Work 900+Z,20 : Rem           <------- Ab Bank 901 = Toggle 1  
  535. Doke Start(900+Z)+0,X : Rem              <------- Word.W = Min X Mouse 
  536. Doke Start(900+Z)+2,X+F*8+5 : Rem        <------- Word.W = Max X Mouse 
  537. Doke Start(900+Z)+4,Y : Rem              <------- Word.W = Min Y Mouse 
  538. Doke Start(900+Z)+6,Y+12 : Rem           <------- Word.W = Max Y Mouse  
  539. Doke Start(900+Z)+8,X : Rem              <------- Word.W = X Coords.   
  540. Doke Start(900+Z)+10,Y : Rem             <------- Word.W = Y Coords.  
  541. Poke Start(900+Z)+12,A : Rem             <------- Byte.B = 1.Farbe  
  542. Poke Start(900+Z)+13,B : Rem             <------- Byte.B = 2.Farbe  
  543. Poke Start(900+Z)+14,F : Rem             <------- Byte.B = Text-L�nge!
  544. Poke Start(900+Z)+15,E : Rem             <------- Byte.B = On/Off 
  545.  
  546. If Length(931)=0 Then Reserve As Work 931,35
  547. A=Hunt(Start(931) To Start(931)+Length(931),Chr$(0))
  548. If Hunt(Start(931) To Start(931)+Length(931),Chr$(Z))=0 Then Poke A,Z
  549.  
  550. End Proc
  551. Procedure _TOGGLEBUTTON_HIT
  552.  
  553. If Length(931)=0 Then Pop Proc[0]
  554. I=0 : F=0
  555. Do 
  556. Z=Peek(Start(931)+I)+900
  557. Inc I
  558. Exit If Z=900
  559.  
  560. A=Deek(Start(Z)+0) : B=Deek(Start(Z)+2)
  561. C=Deek(Start(Z)+4) : D=Deek(Start(Z)+6)
  562.  
  563. If X Screen(X Mouse)>A and X Screen(X Mouse)<B and Y Screen(Y Mouse)>C and Y Screen(Y Mouse)<D and Mouse Key=1 Then F=1
  564.  
  565. If F=1
  566.    X=Deek(Start(Z)+8) : Y=Deek(Start(Z)+10)
  567.    A=Peek(Start(Z)+12) : B=Peek(Start(Z)+13)
  568.    C=Peek(Start(Z)+14) : D=Peek(Start(Z)+15)
  569. End If 
  570.  
  571. If F=1 and D=0
  572. Ink A,B
  573. Draw X+1,Y+12 To X+C*8+5,Y+12
  574. Draw X+C*8+5,Y+1 To X+C*8+5,Y+12
  575. Ink B,A
  576. Draw X,Y To X+C*8+4,Y
  577. Draw X,Y To X,Y+12
  578. Poke Start(Z)+15,1
  579. Repeat : Until Mouse Key=0
  580. Pop Proc[Z-900]
  581. End If 
  582.  
  583. If F=1 and D=1
  584. Ink B,A
  585. Draw X+1,Y+12 To X+C*8+5,Y+12
  586. Draw X+C*8+5,Y+1 To X+C*8+5,Y+12
  587. Ink A,B
  588. Draw X,Y To X+C*8+4,Y
  589. Draw X,Y To X,Y+12
  590. Poke Start(Z)+15,0
  591. Repeat : Until Mouse Key=0
  592. Pop Proc[Z-900]
  593. End If 
  594.  
  595. Loop 
  596. End Proc[0]
  597. Procedure _SET_TOGGLEBUTTON_STATE[A,B]
  598.  
  599. If A<1 or A>30 Then Pop Proc
  600.  
  601. If Length(900+A)<>0
  602. E=1
  603. X=Deek(Start(900+A)+8) : Y=Deek(Start(900+A)+10)
  604. C=Peek(Start(900+A)+12) : D=Peek(Start(900+A)+13)
  605. F=Peek(Start(900+A)+14)
  606. End If 
  607.  
  608. If E=1 and B=0
  609. Ink D,C
  610. Draw X+1,Y+12 To X+F*8+5,Y+12
  611. Draw X+F*8+5,Y+1 To X+F*8+5,Y+12
  612. Ink C,D
  613. Draw X,Y To X+F*8+4,Y
  614. Draw X,Y To X,Y+12
  615. Poke Start(900+A)+15,0
  616. End If 
  617.  
  618. If E=1 and B=1
  619. Ink C,D
  620. Draw X+1,Y+12 To X+F*8+5,Y+12
  621. Draw X+F*8+5,Y+1 To X+F*8+5,Y+12
  622. Ink D,C
  623. Draw X,Y To X+F*8+4,Y
  624. Draw X,Y To X,Y+12
  625. Poke Start(900+A)+15,1
  626. End If 
  627.  
  628. End Proc
  629. Procedure _GET_TOGGLEBUTTON_STATE[A]
  630. If A<1 or A>30 or Length(900+A)=0 Then Pop Proc[-1]
  631. B=Peek(Start(900+A)+15)
  632. End Proc[B]
  633. Procedure _DEL_TOGGLEBUTTON[A]
  634. If A<1 or A>30 or Length(900+A)=0 Then Pop Proc
  635. A$=Peek$(Start(931),30,Chr$(0))
  636. A$=A$-Chr$(A) : Poke$ Start(931),A$+Chr$(0)
  637. If A$="" Then Erase 931
  638. Erase 900+A
  639. End Proc
  640. Procedure _STRINGGADGET[Z,X,Y,A,B,C,D,E,F,G]
  641. '
  642. '    StringGadget aufbauen!
  643. '
  644. If Z<1 or Z>30 Then Pop Proc
  645. H=Screen Mode
  646. If H<>0 and X/2*2<>X Then Inc X
  647. Cls A,X,Y To X+F*8+4,Y+11
  648. Cls B,X+1,Y+1 To X+1+F*8+4,Y+11
  649. Cls C,X+1,Y+1 To X+1+F*8+3,Y+10
  650. '
  651. '    Daten zum StringGadget in Bank sichern! 
  652. '
  653. Reserve As Work 1000+Z,G+50 : Rem         <------- Ab Bank 1001 = Gadget 1   
  654. Doke Start(1000+Z)+0,X : Rem              <------- Word.W = Min X Mouse 
  655. Doke Start(1000+Z)+2,X+F*8+5 : Rem        <------- Word.W = Max X Mouse 
  656. Doke Start(1000+Z)+4,Y : Rem              <------- Word.W = Min Y Mouse 
  657. Doke Start(1000+Z)+6,Y+10 : Rem           <------- Word.W = Max Y Mouse  
  658. Doke Start(1000+Z)+8,X : Rem              <------- Word.W = X Coords.   
  659. Doke Start(1000+Z)+10,Y : Rem             <------- Word.W = Y Coords.  
  660. Poke Start(1000+Z)+12,C : Rem             <------- Byte.B = GadGetFarbe
  661. Poke Start(1000+Z)+13,D : Rem             <------- Byte.B = TextFarbe
  662. Poke Start(1000+Z)+14,E : Rem             <------- Byte.B = CursorFarbe
  663. Poke Start(1000+Z)+15,F : Rem             <------- Byte.B = GadLen 
  664. Poke Start(1000+Z)+16,G : Rem             <------- Byte.B = MaxTextLen 
  665. Poke$ Start(1000+Z)+20,Chr$(10) : Rem     <------- Zu beginn LeerString  
  666.  
  667. If Length(1031)=0 Then Reserve As Work 1031,35
  668. A=Hunt(Start(1031) To Start(1031)+Length(1031),Chr$(0))
  669. If Hunt(Start(1031) To Start(1031)+Length(1031),Chr$(Z))=0 Then Poke A,Z
  670.  
  671. End Proc
  672. Procedure _STRINGGADGET_HIT
  673.  
  674. If Length(1031)=0 Then Pop Proc[0]
  675. I=0 : F=0
  676. Do 
  677. Z=Peek(Start(1031)+I)+1000
  678. Inc I
  679. Exit If Z=1000 or F<>0
  680.  
  681. A=Deek(Start(Z)+0) : B=Deek(Start(Z)+2)
  682. C=Deek(Start(Z)+4) : D=Deek(Start(Z)+6)
  683.  
  684. If X Screen(X Mouse)>A and X Screen(X Mouse)<B and Y Screen(Y Mouse)>C and Y Screen(Y Mouse)<D and Mouse Key=1
  685. F=1
  686. Exit 1
  687. End If 
  688.  
  689. Loop 
  690.  
  691. If F=0 Then Pop Proc[0]
  692.  
  693. X=Deek(Start(Z)+8) : Y=Deek(Start(Z)+10)
  694. A=Peek(Start(Z)+12) : B=Peek(Start(Z)+13)
  695. C=Peek(Start(Z)+14) : D=Peek(Start(Z)+15)
  696. E=Peek(Start(Z)+16) : B$=Peek$(Start(Z)+20,E,Chr$(10))
  697. Ink B,A
  698. Text X+3,Y+8,Right$(B$,D-1)
  699. Ink B,C
  700. Text X+3+Len(Right$(B$,D-1))*8,Y+8," "
  701. Repeat : Until Mouse Key=0
  702. Clear Key 
  703.  
  704. Do 
  705. A$=Inkey$
  706. Exit If A$=Chr$(13) or Mouse Key=1
  707.  
  708. If A$=Chr$(8) and B$<>""
  709. Ink B,A
  710. Text X+3,Y+8,Right$(B$,D-1)+" "
  711. A$=Left$(B$,Len(B$)-1)
  712. B$=A$ : A$=""
  713. End If 
  714.  
  715. If Len(B$)<>E and A$<>Chr$(8) Then B$=B$+A$
  716.  
  717. If Upper$(A$)="X" and Key Shift=128
  718. Ink B,A : Text X+3,Y+8,Space$(D) : B$=""
  719. End If 
  720.  
  721. Ink B,A
  722. Text X+3,Y+8,Right$(B$,D-1)
  723. Ink B,C
  724. Text X+3+Len(Right$(B$,D-1))*8,Y+8," "
  725. Loop 
  726.  
  727. Ink B,A
  728. Text X+3+Len(Right$(B$,D-1))*8,Y+8," "
  729. Poke$ Start(Z)+20,B$+Chr$(10)
  730. End Proc[Z-1000]
  731. Procedure _SET_STRINGGADGET_STATE[A,A$]
  732.  
  733. If A<1 or A>30 Then Pop Proc
  734.  
  735. If Length(1000+A)<>0
  736. E=1
  737. X=Deek(Start(1000+A)+8) : Y=Deek(Start(1000+A)+10)
  738. C=Peek(Start(1000+A)+12) : D=Peek(Start(1000+A)+13)
  739. E=Peek(Start(1000+A)+15) : F=Peek(Start(1000+A)+16)
  740. Ink D,C : Text X+3,Y+8,Left$(A$,E)
  741. Poke$ Start(1000+A)+20,Left$(A$,F)+Chr$(10)
  742. End If 
  743.  
  744. End Proc
  745. Procedure _GET_STRINGGADGET_STATE[A]
  746. If A<1 or A>30 or Length(1000+A)=0 Then Pop Proc[-1]
  747. B=Peek(Start(1000+A)+16)
  748. A$=Peek$(Start(1000+A)+20,B,Chr$(10))
  749. End Proc[A$]
  750. Procedure _DEL_STRINGGADGET[A]
  751. If A<1 or A>30 or Length(1000+A)=0 Then Pop Proc
  752. A$=Peek$(Start(1031),30,Chr$(0))
  753. A$=A$-Chr$(A) : Poke$ Start(1031),A$+Chr$(0)
  754. If A$="" Then Erase 1031
  755. Erase 1000+A
  756. End Proc
  757. Procedure _TEXTGADGET[Z,X,Y,A,B,C,D,E]
  758. '
  759. '    TextGadget aufbauen!
  760. '
  761. If Z<1 or Z>30 Then Pop Proc
  762. F=Screen Mode
  763. If F<>0 and X/2*2<>X Then Inc X
  764. Cls A,X,Y To X+E*8+5,Y+11
  765. Cls B,X+1,Y+1 To X+1+E*8+5,Y+11
  766. Cls C,X+1,Y+1 To X+1+E*8+4,Y+10
  767. '
  768. '    Daten zum TextGadget in Bank sichern! 
  769. '
  770. Reserve As Work 1100+Z,20 : Rem          <------- Ab Bank 1101 = Gadget 1    
  771. Doke Start(1100+Z)+0,X : Rem             <------- Word.W = X Coords.    
  772. Doke Start(1100+Z)+2,Y : Rem             <------- Word.W = Y Coords.  
  773. Poke Start(1100+Z)+4,C : Rem             <------- Byte.B = GadgetFarbe  
  774. Poke Start(1100+Z)+5,D : Rem             <------- Byte.B = TextFarbe  
  775. Poke Start(1100+Z)+6,E : Rem             <------- Byte.B = MaxText-L�nge! 
  776. End Proc
  777. Procedure _SET_TEXTGADGET_TEXT[A,A$]
  778.  
  779. If A<1 or A>30 or Length(1100+A)=0 Then Pop Proc
  780.  
  781. X=Deek(Start(1100+A)+0) : Y=Deek(Start(1100+A)+2)
  782. C=Peek(Start(1100+A)+4) : D=Peek(Start(1100+A)+5)
  783. E=Peek(Start(1100+A)+6)
  784.  
  785. Ink D,C
  786. Text X+3,Y+8,Space$(E)
  787. Text X+3,Y+8,Left$(A$,E)
  788. End Proc
  789. Procedure _MAKE_MASK[X,Y,A,B,C,D,E]
  790. Cls C,X,Y To A,B
  791. Cls D,X+1,Y+1 To A,B
  792. Cls E,X+1,Y+1 To A-1,B-1
  793. End Proc
  794. Procedure _SCREEN_OPEN[A,B]
  795. If A<0 or A>7 or B<0 or B>2 Then Pop Proc
  796. If B=0 Then Screen Open A,320,256,4,Lowres
  797. If B=1 Then Screen Open A,640,256,4,Hires
  798. If B=2 Then Screen Open A,640,512,4,Laced
  799. Flash Off : Cls 0
  800. Palette $AAA,$0,$FFF,$68B
  801. End Proc